package Logica;

import accesodatos.FachadaDW;
import java.awt.image.BufferedImage;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JFrame;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author Ana Maria
 */
public class PromedioTiempoCitas extends JFrame {

    BufferedImage image = null;
    private JFreeChart grafico;
    FachadaDW dw = new FachadaDW();

    public PromedioTiempoCitas() {
    }

    public String getPromCitasPorAño(String anio, String estrato, String sexo, String estado_civil, String nivel_escolaridad) {


        String clauseEstratoAC;
        String clauseSexoAC;
        String clauseEstado_civilAC;
        String clauseNivel_EscolaridadAC;
        String clauseEstratoACE;
        String clauseSexoACE;
        String clauseEstado_civilACE;
        String clauseNivel_EscolaridadACE;

        String consulta = "";


        String SQL_HEADER = "SELECT (RESULTS1.promedio+RESULTS2.promedio)/2 promedio, RESULTS1.nombre_mes FROM ";

        String SQL_ACE = "(SELECT AVG(tiempo_espera) promedio, nombre_mes "
                + "FROM atencion_cita_especializada ACE JOIN fecha f ON f.k_fecha = ACE.id_fecha_atencion WHERE f.anio = '" + anio + "'";
        String SQL_GROUP_ACE = "group by mes order by mes) RESULTS1 JOIN ";

        String SQL_AC = "(SELECT AVG (tiempo_espera) promedio, nombre_mes "
                + "FROM atencion_citas AC join fecha f on f.k_fecha = AC.id_fecha_atencion ";
        String SQL_FIN_AC = "group by mes order by mes) RESULTS2 ON RESULTS1.nombre_mes = RESULTS2.nombre_mes;";


        if (estrato.equals("") || estrato.equals(" ")) {

            clauseEstratoAC = "";
            clauseEstratoACE = "";
        } else {

            clauseEstratoAC = "AND ((SELECT  estrato FROM dimension_demografica WHERE AC.id_demografia = id_demografia) = '" + estrato + "')";
            clauseEstratoACE = "AND ((SELECT  estrato FROM dimension_demografica WHERE ACE.id_demografia = id_demografia) = '" + estrato + "')";

        }
        if (sexo.equals("") || sexo.equals(" ")) {

            clauseSexoAC = "";
            clauseSexoACE = "";

        } else {

            clauseSexoAC = "AND ((SELECT  sexo FROM dimension_demografica WHERE id_demografia = AC.id_demografia) = '" + sexo + "')";
            clauseSexoACE = "AND ((SELECT  sexo FROM dimension_demografica WHERE id_demografia = ACE.id_demografia) = '" + sexo + "')";

        }
        if (estado_civil.equals("") || estado_civil.equals(" ")) {

            clauseEstado_civilAC = "";
            clauseEstado_civilACE = "";

        } else {

            clauseEstado_civilAC = "AND ((SELECT  estado_civil FROM dimension_demografica WHERE id_demografia = AC.id_demografia) = '" + estado_civil + "')";
            clauseEstado_civilACE = "AND ((SELECT  estado_civil FROM dimension_demografica WHERE id_demografia = ACE.id_demografia) = '" + estado_civil + "')";

        }
        if (nivel_escolaridad.equals("") || nivel_escolaridad.equals(" ")) {

            clauseNivel_EscolaridadAC = "";
            clauseNivel_EscolaridadACE = "";

        } else {

            clauseNivel_EscolaridadAC = "AND ((SELECT  nivel_escolaridad FROM dimension_demografica WHERE id_demografia = AC.id_demografia) = '" + nivel_escolaridad + "')";
            clauseNivel_EscolaridadACE = "AND ((SELECT  nivel_escolaridad FROM dimension_demografica WHERE id_demografia = ACE.id_demografia) = '" + nivel_escolaridad + "')";
        }

        SQL_ACE += clauseSexoACE + clauseEstratoACE + clauseEstado_civilACE + clauseNivel_EscolaridadACE + SQL_GROUP_ACE;
        SQL_AC += clauseEstratoAC + clauseSexoAC + clauseEstado_civilAC + clauseNivel_EscolaridadAC + SQL_FIN_AC;
        consulta += SQL_HEADER + SQL_ACE + SQL_AC;
        System.out.println(consulta);



        return consulta;

    }

    public void CrearGraficoDeBarras(String series, String title, String infoX, String infoY) {

        DefaultCategoryDataset data = new DefaultCategoryDataset();

        try {
            Connection con = dw.conectar();
            Statement statement = con.createStatement();
            ResultSet set = statement.executeQuery(series);

            while (set.next()) {

                data.setValue(set.getInt("promedio"), set.getString("nombre_mes"),"");
            }

            JFreeChart chart = ChartFactory.createBarChart3D(title, infoX, infoY, data, PlotOrientation.VERTICAL, true, true, true);

            ChartFrame frame = new ChartFrame("Resultado", chart);
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);

        } catch (SQLException ex) {

            System.out.println(ex);
        }




    }

    public void CrearGraficoDePastel(String series, String title) {



        DefaultPieDataset pie = new DefaultPieDataset();
        String[] meses = {"Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"};


        try {
            Connection con = dw.conectar();
            Statement statement = con.createStatement();
            ResultSet set = statement.executeQuery(series);

            while (set.next()) {

                pie.setValue(set.getString("nombre_mes"), set.getInt("promedio"));
            }

            JFreeChart chart = ChartFactory.createPieChart3D(title, // Title
                    pie, // Dataset
                    true, // Show legend
                    true, // Use tooltips
                    false // Configure chart to generate URLs?
                    );

            ChartFrame frame = new ChartFrame("Resultado", chart);
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);

        } catch (SQLException ex) {

            System.out.println(ex);
        }

        grafico = ChartFactory.createPieChart3D(title, pie);
        ChartPanel chartPanel = new ChartPanel(grafico, false);
        this.setContentPane(chartPanel);

    }

    public String getPromCitasGenPorAño(String anio, String estrato, String sexo, String estado_civil, String nivel_escolaridad) {

        String clauseEstratoAC;
        String clauseSexoAC;
        String clauseEstado_civilAC;
        String clauseNivel_EscolaridadAC;

        String consulta = "";

        String SQL_AC = "SELECT AVG(tiempo_espera) promedio, nombre_mes "
                + "FROM atencion_citas AC JOIN fecha f ON f.k_fecha = AC.id_fecha_atencion WHERE f.anio = '" + anio + "'";
        String SQL_GROUP_AC = "group by mes order by mes";

        if (estrato.equals("") || estrato.equals(" ")) {

            clauseEstratoAC = "";
        } else {

            clauseEstratoAC = "AND ((SELECT  estrato FROM dimension_demografica WHERE AC.id_demografia = id_demografia) = '" + estrato + "')";

        }
        if (sexo.equals("") || sexo.equals(" ")) {

            clauseSexoAC = "";

        } else {

            clauseSexoAC = "AND ((SELECT  sexo FROM dimension_demografica WHERE id_demografia = AC.id_demografia) = '" + sexo + "')";

        }
        if (estado_civil.equals("") || estado_civil.equals(" ")) {

            clauseEstado_civilAC = "";

        } else {

            clauseEstado_civilAC = "AND ((SELECT  estado_civil FROM dimension_demografica WHERE id_demografia = AC.id_demografia) = '" + estado_civil + "')";

        }
        if (nivel_escolaridad.equals("") || nivel_escolaridad.equals(" ")) {

            clauseNivel_EscolaridadAC = "";

        } else {

            clauseNivel_EscolaridadAC = "AND ((SELECT  nivel_escolaridad FROM dimension_demografica WHERE id_demografia = AC.id_demografia) = '" + nivel_escolaridad + "')";
        }
        SQL_AC += clauseSexoAC + clauseEstratoAC + clauseEstado_civilAC + clauseNivel_EscolaridadAC + SQL_GROUP_AC;
        consulta += SQL_AC;
        System.out.println(consulta);
        return consulta;


    }

    public String getPromCitasEspPorAño(String anio, String estrato, String sexo, String estado_civil, String nivel_escolaridad) {



        String clauseEstratoACE;
        String clauseSexoACE;
        String clauseEstado_civilACE;
        String clauseNivel_EscolaridadACE;

        String consulta = "";

        String SQL_ACE = "SELECT AVG(tiempo_espera) promedio, nombre_mes "
                + "FROM atencion_cita_especializada ACE JOIN fecha f ON f.k_fecha = ACE.id_fecha_atencion WHERE f.anio = '" + anio + "'";
        String SQL_GROUP_ACE = "group by mes order by mes";




        if (estrato.equals("") || estrato.equals(" ")) {

            clauseEstratoACE = "";
        } else {

            clauseEstratoACE = "AND ((SELECT  estrato FROM dimension_demografica WHERE ACE.id_demografia = id_demografia) = '" + estrato + "')";

        }
        if (sexo.equals("") || sexo.equals(" ")) {

            clauseSexoACE = "";

        } else {

            clauseSexoACE = "AND ((SELECT  sexo FROM dimension_demografica WHERE id_demografia = ACE.id_demografia) = '" + sexo + "')";

        }
        if (estado_civil.equals("") || estado_civil.equals(" ")) {

            clauseEstado_civilACE = "";

        } else {

            clauseEstado_civilACE = "AND ((SELECT  estado_civil FROM dimension_demografica WHERE id_demografia = ACE.id_demografia) = '" + estado_civil + "')";

        }
        if (nivel_escolaridad.equals("") || nivel_escolaridad.equals(" ")) {

            clauseNivel_EscolaridadACE = "";

        } else {

            clauseNivel_EscolaridadACE = "AND ((SELECT  nivel_escolaridad FROM dimension_demografica WHERE id_demografia = ACE.id_demografia) = '" + nivel_escolaridad + "')";
        }

        SQL_ACE += clauseSexoACE + clauseEstratoACE + clauseEstado_civilACE + clauseNivel_EscolaridadACE + SQL_GROUP_ACE;
        consulta += SQL_ACE;
        System.out.println(consulta);



        return consulta;

    }

    public static void main(String args[]) {



        PromedioTiempoCitas tp = new PromedioTiempoCitas();
        String anio = "2006";
        String estrato = "3";
        String sexo = "F";
        String estado_civil = "Casado";
        String nivel_escolaridad = "";
        String series = tp.getPromCitasGenPorAño(anio, estrato, sexo, estado_civil, nivel_escolaridad);
        tp.CrearGraficoDePastel(series, "Consulta Promedio de espera en citas generales y especializadas");

        tp.CrearGraficoDeBarras(series, "Colombia Saludable - Tiempo promedio de espera citas", "Meses", "Promedio de espera en dias");
    }
}
